Ollama 是一款專為運行和管理各種機器學習模型而設計的工具。其核心功能是通過簡單的命令行操作或 REST API 來下載、部署和執行機器學習模型。Ollama 支持多種模型格式,例如 TensorFlow、PyTorch 等,並且可以在多種平台上運行,包括本地環境和 Docker 容器。
Ollama 的特點包括:
多模型支持:Ollama 支援多種機器學習模型格式,並且可以輕鬆切換和管理不同模型。
容器化支持:Ollama 可以在 Docker 容器中運行,這使得它非常適合在雲端或分佈式系統中部署。
簡化的使用介面:Ollama 提供了簡單直觀的命令行界面,允許用戶輕鬆下載、部署和測試模型。
高效的模型管理:Ollama 支援模型的版本控制和配置管理,方便用戶在不同環境中使用不同版本的模型。
集成能力:Ollama 可以與多種數據源和應用程式進行集成,從而實現端到端的機器學習應用程式部署。
盡量用docker hub,去啟一個container來執行
一開始我用它預設snap的執行去ollama run 模型名稱
會遇到很多model都不能執行(因為ollama版本問題)
所以還是去用docker pull 抓最新的image比較好
必須是0.1.47以上,但我用snap只有0.1.31
LLM就都不回我訊息
解法就是用docker hub抓最新的去啟container啦
docker pull ollama/ollama:latest
這邊只是在你的本地創建了一個靜態的映像文件,並不會直接運行它。必須透過
docker run
才是真正啟動一個基於image的container
docker images
將下載好的image啟動為一個正在運行的container
docker run -d --name ollama_service ollama/ollama:latest serve
docker run
這個命令才是真正啟動一個基於映像的容器。docker run
是將下載好的映像啟動為一個正在運行的容器,這個容器會成為應用程式運行的實際環境。
-d
這個標誌表示 Docker 會將容器作為一個守護進程在後台運行。這樣,容器不會佔用你的終端窗口,你可以在容器後台運行時繼續操作其他命令。如果你不加 -d
,容器將會在前台運行,並且你的終端會被占用。
--name ollama_service
這個標誌用來指定你運行的容器的名稱。在這個例子中,容器的名稱被指定為 ollama_service
。這使得你可以方便地通過這個名稱來管理容器,例如停止、啟動或刪除它。
ollama/ollama:latest
這是指定要使用的映像及其標籤。latest
是一個標籤,代表最新的版本。
serve
這個部分是告訴容器在啟動後要執行的命令。在這個例子中,serve
命令指示容器啟動 Ollama 的服務模式,讓它開始提供服務(例如 API 服務,或者是其他的網路服務)。
docker pull
只是下載映像,並不會自動運行它。docker run
才是啟動容器的命令,讓下載好的映像在一個隔離的環境中運行。-d
讓容器在後台運行,--name
指定容器名稱,serve
指定容器啟動後要執行的具體操作。因此,docker run -d --name ollama_service ollama/ollama:latest serve
這條命令的目的是在後台運行一個名為 ollama_service
的容器,這個容器基於 ollama/ollama:latest
映像,並且執行 serve
命令來啟動服務。
確保有container 在運行
docker ps
進入到該container中docker exec -it ollama_service /bin/bash
即可安裝ollama 模型
ollama run gemma2
mkdir /app
apt-get update
apt-get install -y vim
vi 安裝好後,就可以開始寫啦!!
FROM python:3.9-slim
RUN apt-get update && apt-get install -y curl
COPY ollama_response_time.py /app/ollama_response_time.py
WORKDIR /app
CMD ["python", "ollama_response_time.py"]
import time
import subprocess
def run_ollama_command(command, user_input):
full_command = f'echo "{user_input}" | {command}'
start_time = time.time()
process = subprocess.Popen(full_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
end_time = time.time()
response_time = end_time - start_time
return stdout.decode('utf-8'), response_time
def download_model(model_name):
print(f"Checking if the model '{model_name}' is already downloaded...")
download_command = f"ollama pull {model_name}"
process = subprocess.Popen(download_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
if process.returncode == 0:
print(f"Model '{model_name}' has been successfully downloaded.")
else:
print(f"Failed to download the model '{model_name}'. Error: {stderr.decode('utf-8')}")
exit(1)
if __name__ == "__main__":
model_name = input("請輸入模型名稱: ")
# Step 1: Download the model if not already downloaded
download_model(model_name)
# Step 2: Prepare the command for running the model
command = f"ollama run {model_name}"
# Step 3: Begin the Q&A loop
while True:
user_input = input(">>> ")
if user_input.lower() in ["exit", "/bye"]:
break
response, response_time = run_ollama_command(command, user_input)
print(f"Response:\n{response}")
print(f"Response Time: {response_time:.4f} seconds")
執行前,記得裝一下python3
apt-get install -y python3
就可以開始執行問答和紀錄時間了!
python3 /app/ollama_response_time.py
因為剛剛都是在container中執行,若關掉後,裡面的資訊也將會不見,所以我們把它包成image後,就可以不用每次都要重複這些步驟
先將模型刪掉,避免image太大包,而包不起來
eg.
在container中檢視一下現有的Model: ollama list
先刪掉所有模型: ollama rm 模型名稱
此時,再開一個終端機到host頁面 (切記!! 不可以離開原本的container中,不然資料會不見)
將container寫成image
docker commit d373235cc633 ollama_respond_time
但原本那個container 已經占用,所以現在就可以把那個container砍掉了
docker run -d --name ollama_service ollama_respond_time serve
docker exec -it ollama_service /bin/bash
python3 /app/ollama_response_time.py
sudo su
docker exec -it ollama_service /bin/bash
python3 /app/ollama_response_time.py
以上就是ollama的介紹啦,
終於要進入最後一天!
將會介紹一下Anything LLM與我的完賽感言XD